那些年,我们一起经历过的 Android 系统性能优化
欢迎点击上方蓝色“泰晓科技”关注我们
Android 系统性能优化,最近几年 ,Google 之外,绝对是中国的手机厂商参与得最深最广。不光深挖系统、场景,还要和 Top 应用合作优化,和各种流氓应用勾心斗角。同时 Google 也在不断吸收一些 common 的优化经验,应用到每年的大版本更新中去。
接下来简单梳理一下,近几年来各大手机厂商拿出来宣传的性能优化技术。
1 华为 - 18 个月不卡顿
长时间使用卡顿,成为 Android 手机的通病,各个手机厂商应该都有专项来投入这个问题,华为是首个公开把这个问题展示到了台前,并成了一段时间的热点。
1.1 技术背景
从华为的公开资料看,应该是通过分析大量压力和老化测试后出现的卡顿问题,有共性的原因归类为下面几个:
1.文件碎片化严重
长时间使用,文件反复读写就带来了大量的文件碎片,读写文件时速度变慢,导致卡顿。2.开放的安卓缺乏对资源优先级的判断
Android 系统是开放的,没有明确的应用优先级。3.系统资源有限无多余资源可用
系统资源有限,资源需求方很多,容易出现同一时刻资源紧张的情况。
1.2 技术方案
1.减少文件碎片化
应用 F2FS: "引入了全新的 F2FS 文件系统,相较于安卓原生的EXT4文件系统,能从源头上减少文件碎片化的产生"
文件系统碎片整理: "引入了实时自动整理文件碎片功能,大大提升了文件垃圾回收效率" 猜想应该是把整理放在空闲/待机时
2.应用优先级智能判断
基于用户习惯和应用流行程度共同设定优先级。
应用分类,打开时提供不同的资源保障。分为:计算优先型、内存优先型、存储优先型。比如相机比较耗内存,打开时就需要立即清理出足够内存。
3. 智能调度
CPU 调度优化:猜想是做了应用级别的 CPU 资源控制,频率核心数,schedule 层面当时不一定有涉及。
内存资源调度:低优先级应用退到后台,进行内存压缩。
存储 IO 资源调度:"开辟了类似公交专用道的动态专属资源通道,以满足优先级高的应用获得稳定足够的IO资源"。猜想基于IO调度器调整进程IO优先级,或者通过blkio cgroup控制其他应用的IO访问。
Android 基础组件优化:数据库 read 优化,引入 Vulkan。
1.3 优化评价
号称 18 个月不卡顿, 是基于一套性能衰退的评估模型, 注意图1的右下角的一行小字 "基于华为测试模型", 在这基础上加大压力,模拟用户使用 18 个月之后的情况。从华为公开的资料看,18 个月不卡顿发布的时候,这个评估模型是基于文件系统的老化之后的性能测试。
"我们使用了一种配合大数据的科学方式来模拟文件系统在 18 个月之后老化的情况。我们让手机在短时间之内,完成一般手机在 18 个月中运行读写、删除、反复读写的流程,就好像看视频的时候按 ”快进”一样。"
基于特定的评估模型,解决特定的问题。效果肯定是有,但是卡顿肯定也还是有,不然就不会有后面的种种吓一跳技术了。
2 华为 - GPU Turbo
2.1 技术背景
华为手机的游戏性能一直饱受诟病,970 之前麒麟处理器的能效做的不好,这里不光有芯片设计层面的问题,也有软件/驱动层面的问题,这时候手机就要去做取舍,在功耗优先的策略下,性能就必然很受限制。
一些媒体公开的评测也能看到,那时候华为的手机往往玩游戏几分钟十几分钟就发热限频了。
2.2 技术方案
出来以后,业界哗然,各种讨论也非常多。
在综合一些后来的评测结果看,个人认为,主要是两点,解决 bug,优化功耗(这可能是 CPU Turbo1.0的核心了)。
2.3 优化评价
从 GPU Benchmark 数据看,GPU Turbo 引入之后并没有带来 Benchmark 数据上的性能提升。
使用麒麟 970 芯片的 P20-PRO 在没有 GPU Turbo 的情况下,如果关闭 "省电精灵", 实测性能表现和同样搭配 970 的、有 GPU Turbo 的荣耀 V10 基本一致。
所以结论是 GPU Turbo 1.0 实际上没有提升 GPU 的物理性能,而是优化了功耗,使得发热降低,从而可以避免之前不得已而为之的"省电精灵"过度限制系统性能。对于移动设备来说,没有牺牲性能的前提下,降低了功耗,其实就相当于是提升了性能。
当然现在 GPU-Turbo 已经进化到了 3.0,估计都是细节的优化比较多,具体提升可能比较有限,毕竟华为都不大力宣传了。
3 华为 EROFS 方舟编译器
尚未有第三方使用的报告,有待验证。
但从文件系统、从编译器入手,确实不是主打性价比的组装厂能做到的。
4 VIVO Multi-Turbo
4.1 技术背景
VIVO 在系统优化包装方面推出的比较晚,18年开始推出 Dual-Turbo,19 年晋级到 Multi-Turbo, 以后可能会叫 Multi-Turbo 2.0?
4.2 技术方案
Turbo 来 boost 去的事情,各个手机厂商应该比较早就都开始做了,不管是高通平台的 perflock 还是MTK平台的perfservice ,原生都具备简单场景 boost 的能力,三星除外。
Turbo 会带来性能提升的原因有二
一是 处理器平台的默认策略往往是性能-功耗均衡的产物,特别是16nm制程之前的处理器,功耗发热都比较厉害,系统的性能-功耗策略就必须做的比较保守,这时候往往针对一些典型的场景比如应用启动、滑动列表做boost,效果就比较明显。
二是 系统并不知道每个应用的特点,他们的资源需求是什么样的,Android 系统的 CPU、GPU、网络、内存 这些子系统都是各自为政,往往某一部分就会成为一些场景的性能短板,这时候做应用资源/行为分析,针对性做资源保障,就可以进一步提升性能表现。
4.2.1 Dual-Turbo
Dual-Turbo分为系统加速引擎 System-Turbo 和游戏引擎 Game-Turbo
System-Turbo
应该是系统层面的 common 加速,比如应用启动、触控、抢红包、微信、头条等典型场景和应用的加速以及调度和内存层面的资源保障策略。
Game-Turbo
应该是在系统策略基础上,做更精细的场景优化,比如游戏加载、帧率稳定性、游戏行为识别(和游戏厂商合作,比如团战了,告诉系统一下),以及更激进的游戏资源保障策略,绑定到大核、清理后台内存等等。
4.2.2 Multi-Turbo
ART++编译增强 Turbo
Net Turbo
Center Turbo
AI Turbo
Cooling Turbo
ART 部分可能是调整了一些参数以及默认行为。
网络部分,物理性能肯定没得提升,倒是可以抢占同一个路由器的资源、另外策略上进行应用级别的网络资源控制。
AI 自动化的识别应用或者是行为?
Cooling Turbo 凑数的,可能是有人专门来tuning 软件温控了,另外只有4个的话,数字可能不够吉利~
4.3 优化评价
从公开的内容看,涉及的面比较多,这里 Turbo 一下,那里也 Turbo 一下,看起来不够系统,甚至取名字都很为难,才叫 Multi-Turbo 。
数了一下,少了内存优化的部分,估计明年会有。最近的IQOO Pro 已经使能了 F2FS。
作为华为之外的厂商,确实很少在单点上做出非常大的突破,但是他们积累的一些方方面面的优化,都是通过大量的市场反馈而来,同样也是非常有价值。
5 OPPO Hyper-Boost
5.1 技术背景
同 VIVO
5.2 技术方案
从命名看,OPPO 比 VIVO 要更有逻辑一点,内容应该差不多。
VIVO 是以技术点分类,A技术 Turbo、B技术 Turbo、C技术 Turbo。
OPPO 以模块分类,系统、游戏、应用
OPPO 系统引擎
整合梳理 CPU、GPU、DDR、存储、modem、wifi、display 做相应的优化。
OPPO 游戏引擎
保障 top 游戏性能,做资源调度优化、网络优化等,以及和部分游戏厂家合作优化
比如当年王者荣耀的多线程版本率先发布, 早期的版本都是一个巨大 UnityMain ,当时基本上没有处理器能吃得消,做到持续高性能输出,手机端是不可能实现的。
OPPO 应用引擎
和 top 应用进行典型场景合作,基本上都是应用通知手机系统要进行到什么场景,手机做针对性的资源准备。
5.3 优化评价
同 VIVO, 值得一提的是应用引擎,和微信、淘宝、QQ 这些 top 应用做合作优化, 和当年王者荣耀多线程版本一样, 会占一点时间优势。这也是国内的手机厂商做的更出色的地方,卖给消费者的不只是硬件和系统,还有使用体验,哪怕不是自己的应用和业务,只要是影响用户使用的地方,就主动去发起合作和优化。
6 小米 - Mi-Turbo
6.1 技术背景
"Game Turbo游戏加速,游戏工具箱2.0,手游爱好者的福音。"
"Mi Turbo 防系统卡顿,通过系统底层优化,模拟使用18个月后依然流畅如新。"
6.2 技术方案
Game Turbo
技术上和 OV 应该差不多,但是没有提和厂家的合作优化,由于小米在发热控制这块一直比较开放,所以一般比较少限频。游戏工具箱、或者是游戏模式 top 几家厂商都有了。
Mi Turbo
有点后发制人的意思,Turbo + 18个月不卡顿,方案和手段应该都是大同小异
6.3 优化评价
由于把小米放在最后,而内容和方案上小米又没有什么特别的地方,所以可写的内容很少。
在系统优化这块呢,小米算是起了个大早,赶了个晚集。
7 Others
7.1 MEIZU
One Mind 智慧引擎
内存清道夫
应用冻结
7.2 一加
RAM Boost
内存压缩 + 常驻内存
7.3 联想
永不卡顿
比较有意思的是永不卡顿居然还有3.0版本,无敌很寂寞,不过现在已经不宣传了。
7.4 努比亚
国企不需要!
应该是做了一些事情的,只不过不会包装。
7.5 三星
Turbo 是什么?三星还是大厂气质,和苹果一样,不整这些,不过易用性、还有针对性的优化方面,三星确实已经落后国产top厂商了,先全球再中国的思路导致的结果吧。但不管是 sdcardfs 还是 F2FS 三星都贡献巨大。
8 总结
总之呢,主要见到的就是下面这些点,选一些组合打包起来,就变成 Multi 或是 Hyper 了。
解决性能短板,bugfix
往往一些短板成为了一款机器的性能瓶颈,比如号称 火龙的 骁龙810处理器,巨大的发热量导致手机不得不降频使用,实际性能甚至不如一下中端机器。典型的短板比如处理器功耗发热、电池容量、散热设计、内存大小等等。
或者是类似系统存在明显的性能bug,比如GPU Driver/framework的问题,影响性能发挥。
场景/行为 boost策略,兼顾 low power
做场景和行为的识别已经非常容易,甚至原生都有,但手机电池毕竟有限,如何避免一些火力全开的暴力想法,做精细化的资源控制,才是考验水平的地方,游戏都跑60帧,只耗2/3的电,不就赢了吗?
更聪明的调度
如果 CPU/GPU/DDR/IO 等各个模块的调度都能做到足够聪明,就好比优秀的自动挡变速箱能做到手动老司机的水平,但手机场景往往非常复杂,一个应用有时候是处理器密集型的、有时候又是IO密集型的,所以聪明的调度和场景策略还需要结合起来用,相辅相成。至于叫不叫 AI 就没所谓了。
应用级别的优化,系统端精细化地去profile具体的应用/游戏,分析其行为特点,保障其使用的资源需求。另外一个方面,只有应用自己知道自己接下来要做什么,需要什么资源,应用在一些时候可以呼叫系统给自己相应的资源支持。这就需要合作优化了。
文件系统 + 存储
比如现在 F2FS + UFS3.0 变成行业热点。大内存 + 应用常驻
应用内存常驻,就可以实现应用秒开,避免加载的时间,大内存是应用常驻的基础,内存压缩可以进一步增加可用内存空间。虚拟机、编译器优化
google 和芯片厂做的比较多,OEM 比较少深度涉及。更好的信号、更优质的屏幕(刷新率 90 Hz 甚至 120 Hz)等硬件。
9 展望
展望一下,这里想把手机厂商分为三类,
一类是苹果,自己研发芯片和核心元件,有自己的OS和生态;
二类是三星、华为,自己研发芯片和核心元件(当然华为和三星还是有所区别),共享 Android OS 和生态,当然三星在本土化这一块做的是不如华为和其他 Top 厂商的;
三类是其他 Android 手机厂商,芯片和核心元件来自于不同供应商,共享 Android OS和生态;
从技术层面看,苹果始终会是在性能的第一阵营,可以顺利推行从硬件到 OS 到 APP 级别的任何性能保障方案;
三星、华为属于第二阵营,可以实现芯片-OS层面的整合优化;
其他 Top Android 手机厂商差距不会太大,他们有多个不同的 SoC 供应商,方案有差异,非常芯片底层的地方,往往不会去涉及,更多是做纯软件层面的策略性的优化,有价值但是不容易形成壁垒,注意这个不容易形成壁垒指的是在 top 厂商中间,一些小的厂商往往还是心有余而力不足。不过还是很期待看到有更多的突破出现。
注:由于微信公众号无法在正文中嵌入外部链接,所以这里的文章为增强阅读体验移去了部分外部链接。如果您希望获取正文中的外部链接请移步本文文末左下方点击 “阅读原文”。
上课啦!上课啦!
近日,泰晓科技与阅码场强强联合,首度推出程序员自我修养之 「360° 剖析 Linux ELF」在线视频课程。如果您想进一步提升自己的实力,掌握更多有关 Linux 环境下程序编译、链接、运行的底层奥秘,欢迎点击 "课程介绍" 进入相关页面了解更多讯息。
“泰晓科技”开通“Linux 知识星球”啦! 为答谢读者的关心,星主奉上免费体验卡一张,可以多人使用,也欢迎转赠给周边的朋友。